package com.foreknow.demo24;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

/**
 * 事物
 * JDBC中如何设置事物提交方式
 * void	setAutoCommit(boolean autoCommit)
 *           将此连接的自动提交模式设置为给定状态。
 * autoCommit - 为 true 表示启用自动提交模式；为 false 表示禁用自动提交模式
 * 如果将setAutoCommit(false)之后，那么DML（insert update delete）之后一定要提交事物
 *  void	commit()
 *           使所有上一次提交/回滚后进行的更改成为持久更改，并释放此 Connection 对象当前持有的所有数据库锁。
 *  void	rollback()
 *           取消在当前事务中进行的所有更改，并释放此 Connection 对象当前持有的所有数据库锁。
 */
public class PreparedStatementTransaction {
  public static void main(String[] args) {
    try {
      Class.forName("com.mysql.jdbc.Driver");
      Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/demodb?useUnicode=true&characterEncoding=utf8&useSSL=false", "root", "zjjlive82");
      //将事物的提交方式改为手动提交
      connection.setAutoCommit(false);
      //获取到到PreparedStatement接口
      PreparedStatement pstmt = connection.prepareStatement("delete from emp where empno=?");
      //将？替换为具体的值
      pstmt.setInt(1, 8888);
      //执行查询
      int isRigth = pstmt.executeUpdate();
      //手动提交事物
      connection.commit();
      System.out.println(isRigth);
      pstmt.close();
      connection.close();
    } catch (ClassNotFoundException e) {
      e.printStackTrace();
    } catch (SQLException e) {
      e.printStackTrace();
    }

  }
}
